package main

import "fmt"

/*
用户注册登录系统
欢迎进入xx系统
1、注册
   用户名
   密码
   年龄
   地址
2、登录
   用户名
   密码
*/
//面向过程的编程  -- 思维模式  做什么事情，实现功能
//面向对象的编程  -- 着重于谁去做
//结构体设定  -- 属性、方法
//后续 维护管理 迭代更新都方便很多

type User struct {
	UserName    string
	UserPasswd  string
	UserAge     int
	UserAddress string
}

type System struct {
	SysName  string
	SysUsers map[string]User
}

func main() {
	var name, passwd, address string
	var age int
	sys1 := System{
		SysName:  "购物系统",
		SysUsers: map[string]User{},
	}
	sys2 := System{
		SysName:  "生鲜系统",
		SysUsers: map[string]User{},
	}

	fmt.Println("选择1进入购物系统，选择2进入生鲜系统")
	var systChoice int
	fmt.Scanln(&systChoice)
	var sys System
	if systChoice == 1 {
		sys = sys1
	} else {
		sys = sys2
	}
	fmt.Println("欢迎来到", sys.SysName, "系统,正在系统初始化...")
	var choice int
	for {
		fmt.Println("1------注册\n2------登录")
		fmt.Print("请输入你的选择--------:")
		fmt.Scanln(&choice)
		switch choice {
		case 1:
			fmt.Println("正在注册...")
			fmt.Print("请输入用户名：")
			fmt.Scanln(&name)
			fmt.Print("请输入密码：")
			fmt.Scanln(&passwd)
			fmt.Print("请输入地址：")
			fmt.Scanln(&address)
			fmt.Print("请输入年龄：")
			fmt.Scanln(&age)
			sys.register(name, passwd, address, age)
		case 2:
			fmt.Println("正在登录...")
			fmt.Print("请输入用户名：")
			fmt.Scanln(&name)
			fmt.Print("请输入密码：")
			fmt.Scanln(&passwd)
			sys.login(name, passwd)
		default:
			fmt.Println("输入有误，请重新输入")
		}
	}
}

func (s *System) register(name, passwd, address string, age int) {
	user := User{UserName: name,
		UserPasswd:  passwd,
		UserAddress: address,
		UserAge:     age,
	}
	s.SysUsers[user.UserName] = user
	fmt.Println(s, "\n注册成功")
}

func (s *System) login(name, passwd string) {
	user, err := s.SysUsers[name]
	if !err {
		fmt.Println("用户尚未注册")
		return
	}
	if user.UserPasswd == passwd {
		fmt.Println("登录成功")
	} else {
		fmt.Println("密码错误，请重新登录")
	}
}
